花了幾天的時間在介紹ROS2與如何使用它,目前都僅透過terminal來學習節點之間的topic如何傳遞訊息,但我們想做的事情絕對不會只有輸出『Hello, world!』這麼簡單,更多的使用情境是要模擬機器人的運作、觀看Sensor送出的資料,那單靠terminal的顯示是不夠的~~我們需要更多直觀的畫面來協助我們理解機器人現在的狀態!!確實也已經有很多工具可以使用,如前幾天提到的rviz2、gazebo等等...
那今天從之前沒提過,但也很實用的RQt開始~
RQt是基於Qt且專門為ROS而生的圖形化界面(Graphical User Interface,GUI),簡單來說就是省去掉在terminal下指令的功夫,讓一般使用者可以透過簡單的按鍵或其他模組來更輕易的使用程式,一般Qt的界面長這樣。
來源:wiki Qt
p.s. 曾經花了一年用Qt做了一個貪吃蛇小遊戲,一開始還沒學物件導向,做起來有點吃力。
那Ros中Qt是這樣用的~一樣要開啟設定完環境變數的terminal
rqt #單純打開rqt視窗
# 如果還沒安裝
sudo apt install ros-foxy-rqt*
在上面的列表看到有個Plugins的標籤,裡面列了所有官方寫好的預設工具
可以依照需求添加工具,會在同一個視窗裡出現
接下來只介紹我用過的~~
開始前先開啟一些範例,方便理解~
ros2 run turtlesim turtlesim_node #terminal1 小烏龜節點
ros2 run turtlesim turtle_teleop_key #terminal2 鍵盤控制節點
rqt #terminal3 叫出rqt視窗
Plugins->Introspection->Node Graph
叫出節點關係界面,可以看到兩個節點之間有哪些topic!
橢圓形的為節點、箭頭為一個topic、被箭頭指著的節點是訂閱者、反之為發布者。
Plugins->Services->Service Caller
叫出服務界面,呼叫/clear可以把小烏龜節點的移動軌跡清除~
還有另外一個服務是/spwan,中文翻譯很可愛XD名詞是卵、動詞是孳生,也就是新增一隻小烏龜的意思~
我新增了兩隻'EJsturtle'、'EJsturtle2',因為第一隻位置在(0,0,0)看不太到,所以再生一隻在(1,1,1)
p.s. Gazebo中新增機器人模型也是透過gazebo的spwan!
Plugins->Topics->Message Publisher
則是可以使用界面來設定發布的內容。
例如我指定對turtle1發布/cmd_vel消息,並用ros2 topic echo /turtle1/cmd_vel
檢查,也確實有訊息一直被發布~
也就是上面的Node Graph
,但可以省去掉要先打開rqt在點選項目欄的時間,直接在terminal輸入
rqt_graph
明天應該會一次介紹rviz2和gazebo,不過gazebo涵蓋的東西很多,所以也會花比較多天的篇幅慢慢介紹~